/*
 * Copyright (c) 2018.
 * This file was written by Fancyears·Milos·Malvis @connor. Any question/bug you can't post to 1243093366@qq.com.
 * ALL RIGHTS RESERVED.
 */
package org.fancyears.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.fancyears.proxy.ServiceProxy;

/**
 * <p>
 * 匹配使用：同时加注到实现类和接口上
 * </p>
 * <p>
 * 如果<span style='color:red'>加注到实现类上</span>，表明这个类是一个dao层的实现类，
 * 并<span style= 'color:blue'>该dao层的mybatis namespace为该dao层的完整限定名称</span>
 * 如果加注到interface上，注明这个接口的实现类是该daoClass，
 * {@link ServiceProxy#doProxy(Object)}中将引用该实现类进行Service/Dao层实现类的属性自动代理 <br/>
 * <br/>
 * 规范化，dao层实现类必须实现该dao层接口，将接口上也注明实现类即可，字段上将就无需进行实现类的注明
 * </p>
 * <p>
 * 单个使用:
 * </p>
 * <p>
 * 如果<span style='color:red'>加注到属性上,</span>，直接表明这个属性的dao层具体<span style=
 * 'color:blue'>实现类</span>
 * </p>
 * 
 * @author: Fancyears·Milos·Malvis
 * @CreateDate: 2019年1月16日 上午9:34:39
 * @Description: 无论是匹配只用还是单个使用，都是为了标识dao层
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD })
public @interface Component {
	public Class<?> target();
}
